| Home | Products | Purchase | Change log & Road map | Gallery | Support | Download | Contact | 中文 |
Home > ResurfNurbs 文档 目录 1. 介绍 2. 指令列表 3. 教程
|
ResurfNurbs 库函数补充孔洞功能模块 API 说明
1. ResurfNurbs 库函数补充孔洞功能简介针对某些几何存在孔洞或残缺的现象,ResurfNurbs库函数提供了用NURBS曲面补充孔洞残缺的功能。NURBS曲面填充孔洞之后,在孔洞边界线处达到G1连续。ResurfNurbs库函数提供了G0/G1连续的数值报告。 如下图1是一个存在孔洞的几何模型:
(图1) 图2拾取蓝色的孔洞边界线作为生成NURBS曲面的输入参数 :
(图2) 图3生成了一张 裁剪NRUBS曲面填充孔洞:
(图3) 图4是孔洞NURBS与相邻的NURBS曲面在公共边界线上的G1连续性偏差报告
(图4) ResurfNurbs库函数既可以生成裁剪曲面填充孔洞,又可以生成非裁剪的四边曲面填充孔洞。具体用那种类型的曲面填充孔洞,用户可以根据孔洞边界的形态做出选择。 2. API 调用的形式调用 API 必须按照以下形式严格执行: Step 1: 初始化 。调用 RsFillHoleByNurbs_Start() 初始化; Step 2: 输入边界线 。调用 RsFillHoleByNurbs_AppendBoundaryCurve() 增加一条 3D 曲线或者调用 RsFillHoleByNurbs_AppendSurfaceEdge() 增加一条曲面边界线。 这些边界线必须围成一个闭环,它们的端点与端点之间的首尾相接距离不要太大。 Step 3: 参数设置 。调用 RsFillHoleByNurbs_SetSmoothFactor() 设置曲面光滑度。 Step 4: 参数设置 。调用 RsFillHoleByNurbs_SetDrapSurfaceType() 设置曲面的形态类型 ; Step 5: 生成曲面 。调用 RsFillHoleByNurbs_DoFill() 执行曲面生成; Step 6: 获取生成的曲面数据 。调用 RsFillHoleByNurbs_GetNurbs() 获取生成的一张 NURBS 曲面; Step 7: 如果生成的是裁剪曲面,获取裁剪边界曲线的数据 。调用 RsFillHoleByNurbs_Get2DTrimmingCurveCount() 获取裁剪环上边界曲线的数目;调用 RsFillHoleByNurbs_Get2DTrimmingCurve() 获取第 i 条 2D 裁剪边界线的数据;调用 RsFillHoleByNurbs_Get3DTrimmingCurve() 获取第 i 条 3D 裁剪边界线的数据; Step 8: 获取新曲面边界线上的连续性报告。调用 RsFillHoleByNurbs_GetMaxG1ReportData(double** point_x, double** point_y, double** point_z, double** angles, int* point_num); RsFillHoleByNurbs_GetG1ReportData(double** point_x, double** point_y, double** point_z, double** angles, int* point_num); RsFillHoleByNurbs_GetMaxG0ReportData(double** point_x, double** point_y, double** point_z, double** deviation, int* point_num);RsFillHoleByNurbs_GetG0ReportData(double** point_x, double** point_y, double** point_z, double** deviation, int* point_num); 等函数查看边界线上的G0/G1连续性; Step9 : 结束调用 。 RsFillHoleByNurbs_End() 。
3.API 参数说明
DECLDIR void RsFillHoleByNurbs_Start(); 功能:初始化功能。该接口为必须最先调用的函数。 参数:该接口没有参数。
DECLDIR void RsFillHoleByNurbs_AppendBoundaryCurve(double* cpx, double* cpy, double* cpz, double* weight, int ctrlp_num, int is_rational, int degree, double* knot); 功能:增加一条 3D NURBS 曲线作为边界线。 3D NURBS 曲线是指不在曲面上的空间曲线。 输入参数说明: int ctrlp_num : 曲线的控制点数目; int is_rational: 该曲线是否为有理 NURBS 曲线。 0 代表非有理 B 样条曲线 ; 1 代表有理 NURBS 曲线; int degree :曲线的次数 ; 必须满足不等式 ctrlp_num>=(degree+1); 当 ctrlp_num==(degree+1) 时,该曲线为 Bezier 曲线; double* knot :曲线的节点向量。长度为 ctrlp_num+degree+1; double* cpx : 存储曲线控制顶点的 x 坐标 , 长度为 ctrlp_num; double* cpy: 存储曲线控制顶点的 y 坐标 , 长度为 ctrlp_num; double* cpz: 存储曲线控制顶点的 z 坐标 , 长度为 ctrlp_num; double* weight: 存储曲线控制顶点的权值 , 长度为 ctrlp_num; 如果该曲线为非有理 B 样条曲线,则 weight 可以为空;
(绿色为3D 曲线) DECLDIR void RsFillHoleByNurbs_AppendSurfaceEdge(double* cpu, double* cpv, double* curve_weight, int ctrlp_num, int is_curve_rational, int degree, double* knot,int iso_type, int continuity, int hasface, double* surf_cpx, double* surf_cpy, double* surf_cpz, double* surf_weight, int u_num, int v_num, int is_surf_rational, int u_degree, int v_degree, double* u_knot, double* v_knot); 功能:增加一条曲面边界曲线 (surface edge) 作为边界线。曲面边界曲线 (surface edge) 是指落在曲面上的曲线,这条曲线由一条曲面的 2D 参数空间上的二维曲线定义。 输入参数说明: 参数包含两个部分内容: NURBS 曲面数据和曲面边界曲线的数据。 NURBS 曲面数据: int u_num : 曲面在 U 方向的控制点数目; int v_num: 曲面在 V 方向的控制点数目; int u_degree: 曲面在 U 方向的次数; int v_degree: 曲面在 V 方向的次数; int is_surf_rational: 曲面是否为有理 NURBS 曲面。 0 代表非有理 B 样条曲面 ; 1 代表有理 NURBS 曲面; double* u_knot: 曲面在 U 方向的节点向量,长度为 u_num+u_degree+1 double* v_knot: 曲面在 V 方向的节点向量,长度为 v_num+v_degree+1 double* surf_cpx: 曲面控制点的 x 分量坐标,长度为 u_num*v_num ,沿 v 方向排列; double* surf_cpy: 曲面控制点的 y 分量坐标,长度为 u_num*v_num ,沿 v 方向排列; double* surf_cpz: 曲面控制点的 z 分量坐标,长度为 u_num*v_num ,沿 v 方向排列; double* surf_weight: 曲面控制点上的权值,长度为 u_num*v_num ,沿 v 方向排列;如果该曲面是非有理 B 样条曲面 , 该值可以为空 ; 曲面边界曲线的数据 : int ctrlp_num : 曲线的控制点数目; int is_curve_rational: 该曲线是否为有理 NURBS 曲线。 0 代表非有理 B 样条曲线 ; 1 代表有理 NURBS 曲线; int degree :曲线的次数 ; 必须满足不等式 ctrlp_num>=(degree+1); 当 ctrlp_num==(degree+1) 时,该曲线为 Bezier 曲线; double* knot :曲线的节点向量。长度为 ctrlp_num+degree+1; double* cpu : 存储曲线控制顶点的 u 向坐标 , 长度为 ctrlp_num; double* cpv: 存储曲线控制顶点的 v 向坐标 , 长度为 ctrlp_num; double* curve_weight: 存储曲线控制顶点的权值 , 长度为 ctrlp_num; 如果该曲线为非有理 B 样条曲线,则 curve_weight 可以为空; int iso_type: 该曲线是否为等参数线:
int continuity: 新曲面在该曲线上的连续性 , 0: G0; 1: G1 int hasface: 该值总是为 1
(蓝色为曲面曲线(surface edge)) DECLDIR void RsFillHoleByNurbs_SetSmoothFactor(double factor); 功能:控制新曲面的光滑性。 输入参数说明: double factor : [0.0001,1.0] 之间取值,越大曲面越光滑;
DECLDIR void RsFillHoleByNurbs_SetDrapSurfaceType(int type); 功能:设置曲面的拉伸形态,根据拉伸形态值,设置曲面是否为裁剪曲面 输入参数说明: int type: 0 --- 自动计算拉伸, 生成裁剪曲面 1 ---- 沿 x 轴方向拉伸,生成裁剪曲面 2 ---- 沿 y 轴方向拉伸,生成裁剪曲面 3 ---- 沿 z 轴方向拉伸,生成裁剪曲面 (蓝色曲线内为用裁剪曲面填充孔洞) 4 ---- 固定四条边界线拉伸,生成非裁剪曲面 . 程序自动计算 4 个角点。
(蓝色曲线内为用非裁剪曲面填充孔洞) 5 ---- 固定四条边界线拉伸,生成第一类孔斯 (coons) 非裁剪曲面 . 程序自动计算 4 个角点。
DECLDIR void RsFillHoleByNurbs_DoFill(); 功能:执行曲面生成。
DECLDIR bool RsFillHoleByNurbs_GetNurbs(int* u_num, int* v_num, int* u_degree, int* v_degree, double** u_knot, double** v_knot, double** cpx, double** cpy, double** cpz); 功能:获取新 NURBS 曲面的数据。 输出参数说明: int *u_num : 曲面在 U 方向的控制点数目; int *v_num: 曲面在 V 方向的控制点数目; int *u_degree: 曲面在 U 方向的次数; int *v_degree: 曲面在 V 方向的次数; double** u_knot: 曲面在 U 方向的节点向量,长度为 u_num+u_degree+1 double** v_knot: 曲面在 V 方向的节点向量,长度为 v_num+v_degree+1 double** cpx: 曲面控制点的 x 分量坐标,长度为 u_num*v_num ,沿 v 方向排列; double** cpy: 曲面控制点的 y 分量坐标,长度为 u_num*v_num ,沿 v 方向排列; double** cpz: 曲面控制点的 z 分量坐标,长度为 u_num*v_num ,沿 v 方向排列;
DECLDIR int RsFillHoleByNurbs_Get2DTrimmingCurveCount(); 功能:返回新裁剪曲面由多少条边界线。如果新曲面是非裁剪曲面,这个数目就是 0. 如果是裁剪曲面,则这些边界曲线组成一个边界环。每根边界曲线可以取到参数域上 2D 曲线和物理曲面位置上的 3D 曲线 .
DECLDIR void RsFillHoleByNurbs_Get2DTrimmingCurve(int index, int* ctrlp_num, int* degree, double** knot, double** cpu, double** cpv); 功能:给定 index ,取出边界环上的第 index 条 2D 曲线数据。 输出参数: 曲面边界曲线的数据 : int index: 曲线在边界环上的 id 号 ; int *ctrlp_num : 曲线的控制点数目 ; int *degree :曲线的次数 ; double** knot :曲线的节点向量。长度为 ctrlp_num+degree+1; double** cpu : 存储曲线控制顶点的 u 向坐标 , 长度为 ctrlp_num; double** cpv: 存储曲线控制顶点的 v 向坐标 , 长度为 ctrlp_num;
DECLDIR void RsFillHoleByNurbs_Get3DTrimmingCurve(int index, int* ctrlp_num, int* degree, double** knot, double** cpx, double** cpy, double** cpz); 功能:给定 index ,取出边界环上的第 index 条 3D 曲线数据。 输出参数: 曲面边界曲线的数据 : int index: 曲线在边界环上的 id 号 ; int *ctrlp_num : 曲线的控制点数目 ; int *degree :曲线的次数 ; double** knot :曲线的节点向量。长度为 ctrlp_num+degree+1; double** cpx : 存储曲线控制顶点的 x 分量坐标 , 长度为 ctrlp_num; double** cpy: 存储曲线控制顶点的 y 分量坐标 , 长度为 ctrlp_num; double** cpz: 存储曲线控制顶点的 z 分量坐标 , 长度为 ctrlp_num;
DECLDIR void RsFillHoleByNurbs_End(); 功能:结束曲面生成。
DECLDIR void RsFillHoleByNurbs_Clear(); 功能:清除所有数据,重置。
DECLDIR bool RsFillHoleByNurbs_GetStatus(); 功能:查看是否成功生成曲面。 返回值: true :成功生成了NURBS曲面; false :没有生成曲面
DECLDIR void RsFillHoleByNurbs_GetMaxG1ReportData(double** point_x, double** point_y, double** point_z, double** angles, int* point_num); 功能:在成功生成曲面的状态下报告每段边界线上的最大G1连续偏差角度。如果边界线是曲面曲线,则存在G1连续的角度偏差值;如果边界线是3D曲线,则不存在G1连续角度偏差值。 输出参数: double** point_x : 边界线上最大G1连续角度偏差值所在点的x坐标分量,该数组大小为 *point_num; double** point_y: 边界线上最大G1连续角度偏差值所在点的y坐标分量,该数组大小为 *point_num; double** point_z:边界线上最大G1连续角度偏差值所在点的z坐标分量,该数组大小为 *point_num; double** angles: 边界线上最大G1连续角度偏差值所在点的G1连续偏差角度大小值,该值为角度值.该数组大小为 *point_num; int* point_num:能度量G1连续的边界线的数目;
DECLDIR void RsFillHoleByNurbs_GetG1ReportData(double** point_x, double** point_y, double** point_z, double** angles, int* point_num); 功能:在成功生成曲面的状态下报告出曲面边界线上一批离散点的最大G1连续偏差角度。如果输入边界线是曲面曲线,则存在G1连续的角度偏差值;如果输入边界线是3D曲线,则不存在G1连续角度偏差值。 输出参数: double** point_x : 边界线上G1连续角度偏差值所在点的x坐标分量,该数组大小为 *point_num; double** point_y: 边界线上G1连续角度偏差值所在点的y坐标分量,该数组大小为 *point_num; double** point_z:边界线上G1连续角度偏差值所在点的z坐标分量,该数组大小为 *point_num; double** angles: 边界线上G1连续角度偏差值所在点的G1连续偏差角度大小值,该值为角度值.该数组大小为 *point_num; int* point_num:边界线上离散点的个数;
DECLDIR void RsFillHoleByNurbs_GetMaxG0ReportData(double** point_x, double** point_y, double** point_z, double** deviation, int* point_num); 功能:在成功生成曲面的状态下报告每段边界线上的最大G0连续距离偏差. 曲面的每条边界线,不管是曲面曲线,还是3D曲线,存在G0连续距离偏差值。 输出参数: double** point_x : 边界线上最大G0连续距离偏差值所在点的x坐标分量,该数组大小为 *point_num; double** point_y: 边界线上最大G0连续距离偏差值所在点的y坐标分量,该数组大小为 *point_num; double** point_z:边界线上最大G0连续距离偏差值所在点的z坐标分量,该数组大小为 *point_num; double** deviation: 边界线上最大G0连续距离偏差值所在点的G0连续偏差距离大小值.该数组大小为 *point_num; int* point_num:能度量G0连续的边界线的数目;
DECLDIR void RsFillHoleByNurbs_GetG0ReportData(double** point_x, double** point_y, double** point_z, double** deviation, int* point_num); 功能:在成功生成曲面的状态下报告边界线上一批离散点的G0连续距离偏差. 曲面的每条边界线,不管是曲面曲线,还是3D曲线,存在G0连续距离偏差值。 输出参数: double** point_x : 边界线上G0连续距离偏差值所在点的x坐标分量,该数组大小为 *point_num; double** point_y: 边界线上G0连续距离偏差值所在点的y坐标分量,该数组大小为 *point_num; double** point_z:边界线上G0连续距离偏差值所在点的z坐标分量,该数组大小为 *point_num; double** deviation: 边界线上G0连续距离偏差值所在点的G0连续偏差距离大小值.该数组大小为 *point_num; int* point_num:该批离散点的个数;
|
Copyright (C) 2007-2025 RESURF All Rights Reserved. Privacy Statement |